﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SundUnderviser.ModelLayer;
using SundUnderviser.DBLayer;

namespace SundUnderviser.ControlLayer
{
    public class UnderviserControler
    {
        public List<Lektion> hentLektionser(DateTime dato)
        {
            DBLektion dbLektion = new DBLektion();
            return dbLektion.HentAlleLektioner(datoOmForm(dato));
        }
        public List<Modul> hentAlleModuler()
        {
            DBModul dbModulObj = new DBModul();
            return dbModulObj.GetAllModules();
        }
        public List<Tema> hentAlleTemaer(int modulnr)
        {
            DBTema dbTemaObj = new DBTema();
            return dbTemaObj.GetAllTema(modulnr);
        }
        public List<Patient> hentAllePatienter()
        {
            DBPatient dbPatientObj = new DBPatient();
            return dbPatientObj.HentAllePatienter();
        }
        public List<Patient> hentAllePatienter(int modulnr)
        {
            DBPatient dbPatientObj = new DBPatient();
            return dbPatientObj.HentAllePatienter(modulnr);
        }

        public List<Underviser> hentAlleUnderviser()
        {
            DBUnderviser dbUnderviserObj = new DBUnderviser();
            return dbUnderviserObj.GetAllUnderviser();
        }
        public List<Stue> hentAlleStuer()
        {
            DBStue dbStueObj = new DBStue();
            return dbStueObj.GetAllStuer();
        }
        public List<Seng> hentAlleSenge(string stuenr)
        {
            DBSeng dbSengObj = new DBSeng();
            return dbSengObj.GetAllSenge(stuenr);
        }
        public int opretLektion(DateTime dato1, Modul modulObj, Tema temaObj, Stue stueObj,
                                Seng sengObj, Underviser undvObj, string beskrivelse, Patient patientObj,
                                string starttid, string sluttid)
        {
            int rc = -1;
            // opret lektion
            DBLektion dbLekObj = new DBLektion();
            Lektion lektionObj = new Lektion();
            lektionObj.Dato = dato1;
            lektionObj.StartTid = starttid;
            lektionObj.SlutTid = sluttid;
            lektionObj.PatientObj = patientObj;
            lektionObj.ModulObj = modulObj;
            lektionObj.StueObj = stueObj;
            lektionObj.UndvObj = undvObj;
            lektionObj.TemaObj = temaObj;
            sengObj.Stue = stueObj;
            rc = dbLekObj.InsertLektion(lektionObj);
            //opret lektions patient objekt
            LektionsPatient lekPatient = new LektionsPatient();
            lekPatient.Navn = patientObj.Navn;
            lekPatient.Adresse = patientObj.Adresse;
            lekPatient.Alder = patientObj.Alder;
            lekPatient.Postnr = patientObj.Postnr;
            lekPatient.Byen = patientObj.Byen;
            lekPatient.Telefon = patientObj.Telefon;
            lekPatient.Samtykke = patientObj.Samtykke;
            lekPatient.Vaerdi = patientObj.Vaerdi;
            lekPatient.IndDato = dato1;
            lekPatient.Medicin = patientObj.Medicin;
            lekPatient.Modul = patientObj.Modul;
            lekPatient.Patientnt = patientObj.Nr;

          
            DBLektionsPatient dbLekPatient = new  DBLektionsPatient();
            rc = dbLekPatient.InsertLektionsPatient(lekPatient, lektionObj,sengObj);
            if (rc == 1)
            {
                // find patientens familie
                PatientControler ctrlPatient = new PatientControler();
                Familie familieObj = ctrlPatient.HentFamilie(lekPatient.Patientnt);
                if (familieObj != null)
                {
                    //der er tilknyttet familie  - opret lektions familie
                    patientObj.Nr = lekPatient.Nr;
                    familieObj.Patient = patientObj;
                    DBLektionsFamilie dbLekFamilie = new DBLektionsFamilie();
                    rc = dbLekFamilie.InsertFamilie(familieObj);
                }
                List<Anamnese> listAnamnese = ctrlPatient.HentAllePatientensAnamnese(lekPatient.Patientnt);
                if (listAnamnese != null)
                {
                    opretLektionsAnamnese(listAnamnese, dato1, lekPatient.Nr);
                }
                List<StatusAnkomst> listStatusAnkomst = ctrlPatient.HenAlleStatusAnkomst(lekPatient.Patientnt);
                if (listStatusAnkomst != null)
                {
                    opretLektionsStatusAnkomst(listStatusAnkomst, dato1, lekPatient.Nr);
                }
                List<Journal> listJournal = ctrlPatient.HenAlleJournal(lekPatient.Patientnt);
                if (listJournal != null)
                {
                    opretLektionsJournal(listJournal, dato1, lekPatient.Nr);
                }
                List<UdfoertHandlinger> listUdfoert = ctrlPatient.HenAlleHandlinger(lekPatient.Patientnt);
                if (listUdfoert != null)
                {
                    opretUdfoertHandling(listUdfoert, dato1, lekPatient.Nr);
                }
                List<Temperatur> listTemp = ctrlPatient.HentPatientsTemp(lekPatient.Patientnt);
                if (listTemp != null)
                {
                    opretLektTemp(listTemp, dato1, lekPatient.Nr);

                }
            }
          
           
            return rc;
        }
        private void opretLektTemp(List<Temperatur> tempList, DateTime dato1, int nr)
            {
                DBLektionsTemperatur dbTemp = new DBLektionsTemperatur();
                foreach (Temperatur tempObj in tempList)
                {
                    tempObj.Date = dato1.AddDays(tempObj.AntalDage);
                    tempObj.Patient.Nr = nr;
                    dbTemp.InsertTemperatur(tempObj);
                }
            }
        private void opretLektionsAnamnese(List<Anamnese> listAnamnese, DateTime dato1, int nr)
        {
            DBLektionsAnamnese dbLekAnam = new DBLektionsAnamnese();
            foreach (Anamnese anamObj in listAnamnese)
            {
                //forhvert objekt opdateres datoen inden oprettelse i lektionsdatabasen
                anamObj.Dato = dato1.AddDays(anamObj.AntalDage);
                anamObj.Patient.Nr = nr;
                Console.WriteLine("nydato" + anamObj.Dato);
                dbLekAnam.InsertAnamnese(anamObj);
            }


        }
        private void opretLektionsStatusAnkomst(List<StatusAnkomst> listStatusAnkomst, DateTime dato1, int nr)
        {
            DBLektionsStatusAnkomst dbAnkomst = new DBLektionsStatusAnkomst();
            foreach (StatusAnkomst statusObj in listStatusAnkomst)
            {
                statusObj.Dato = dato1.AddDays(statusObj.AntalDage);
                statusObj.Patient.Nr = nr;
                Console.WriteLine("nydato ankomst" + statusObj.Dato);
                dbAnkomst.InsertStatusAnkomst(statusObj);
            }
        }
        private void opretLektionsJournal(List<Journal> listJournal, DateTime dato1, int nr)
        {
            DBLektionsJournal dbJournal = new DBLektionsJournal();
            foreach (Journal journalObj in listJournal)
            {
                journalObj.Patient.Nr = nr;
                journalObj.Dato = dato1.AddDays(journalObj.AntalDage);
                dbJournal.InsertJournal(journalObj);
            }
        }
        private void opretUdfoertHandling(List<UdfoertHandlinger> listUdfoert, DateTime dato1, int nr)
        {
            DBLektionsUdFoertHandling dbUdfoert = new DBLektionsUdFoertHandling();
            foreach (UdfoertHandlinger udfoertObj in listUdfoert)
            {
                udfoertObj.Patient.Nr = nr;
                udfoertObj.Dato = dato1.AddDays(udfoertObj.AntalDage);
                dbUdfoert.InsertUdfoertHandling(udfoertObj);
            }

        }
        private String datoOmForm(DateTime dato)
        {

            String myDate = dato.Year.ToString();
            if (dato.Month < 10)
            {
                myDate = myDate + "0" + dato.Month;
            }
            else
            {
                myDate = myDate + dato.Month;
            }
            if (dato.Day < 10)
            {
                myDate = myDate + "0" + dato.Day;
            }
            else
            {
                myDate = myDate + dato.Day;
            }
            return myDate;
        }

    }


}
